package api

import (
	"github.com/gin-gonic/gin"
	"github.com/go-playground/validator/v10"
	"wwgin/global/variable"
	"wwgin/module/response"
	"wwgin/validate/api/index"
)

type Index struct{}

//测试的控制器,这里主要展示apidoc文档生产的书写格式和验证器的使用

/**
 * @apiDefine CommonParam
 * @apiParam {string} token 全局参数登录凭证token
 * @apiParam {string} [v] 全局参数版本号
 */

/**
 * @api {get} /index/index 新闻首页
 * @apiName 新闻首页信息
 * @apiGroup 新闻相关
 *
 * @apiUse CommonParam
 * @apiParam {int} id 新闻的唯一id
 *
 * @apiSuccess {string} title 新闻的标题
 * @apiSuccess {string} content  新闻的内容
 */
func (i *Index) Index(c *gin.Context) {
	//参数绑定验证
	var request = index.GetLastCheck{}
	err := c.ShouldBind(&request) //参数绑定
	if err != nil {
		for _, err := range err.(validator.ValidationErrors) {
			response.Fail(c, err.Translate(variable.Trans)) // validator.ValidationErrors类型错误则进行翻译
			return
		}
	}
	response.SuccessData(c, "ok", gin.H{
		"title":   "标题",
		"content": "内容",
		"request": request,
	})
	return
}

/**
 * @api {post} /index/add 添加用户
 * @apiName 添加用户
 * @apiGroup 用户相关
 *
 * @apiUse CommonParam
 *
 * @apiParam {string} username 名称
 * @apiParam {string} phone 手机号
 *
 */
func (i *Index) Add(c *gin.Context) {
	//参数绑定验证
	var request = index.UpZsMark{}
	err := c.ShouldBind(&request) //参数绑定
	if err != nil {
		for _, err := range err.(validator.ValidationErrors) {
			response.Fail(c, err.Translate(variable.Trans)) // validator.ValidationErrors类型错误则进行翻译
			return
		}
	}
	response.SuccessData(c, "ok", gin.H{
		"title":   "标题",
		"content": "内容",
		"request": request,
	})
	return
}

/**
 * @api {get} /index/info 一个完整的接口信息示例
 * @apiName getAllInfo
 * @apiVersion 0.0.0
 * @apiGroup 用户相关
 *
 * @apiUse CommonParam
 *
 * @apiExample {curl} 例子请求的使用方法:
 *     curl -i http://localhost/user/4711
 *
 * @apiDescription 这里是接口的简介信息
 *
 * @apiDeprecated 现在使用: (#Group:Name).
 *
 * @apiPermission 接口的权限介绍,admin用户可以访问
 *
 * @apiHeader {string} sign header头像信息,签名,这里的使用参考apiParam
 * @apiHeaderExample {json} 头信息例子:
 *     {
 *       "Accept-Encoding": "Accept-Encoding: gzip, deflate"
 *     }
 *
 * @apiSampleRequest /user/info
 *
 * @apiParam {int} id 用户的唯一id
 * @apiParam {int} id[n] 嵌套参数
 * @apiParam {string {..5}="small","huge"} idx 更复杂的参数
 * @apiParam {string} [phone] 用户的手机号
 * @apiParam {string{0-255}} [msg] 消息
 * @apiParam {string="wx","ali"} pay 支付类型wx,ali微信和支付宝
 * @apiParam {string=1,2} [type] 类型1获取2设置
 * @apiParam {string} country="EN" 必传参数国家,默认值是 "EN"
 * @apiParam {int} [age=18] 可选参数age,不传默认值是18
 * @apiParam (application-json) {string} pass 可以用来设置header信息?或者body信息?
 * @apiParam {object} [address]         地址信息:比如是一个对象
 * @apiParam {string} [address[street]] 可选,地址的街道
 * @apiParam {string} address[city]   必须,地址的城市
 *
 * @apiParamExample {json} 参数的例子:
 *     {
 *       "id": 4711
 *     }
 *
 * @apiSuccess {string} username 名称
 * @apiSuccess {string} password 密码
 * @apiSuccess {date}   registered 注册时间
 * @apiSuccess (info) {string} key 加密的key
 * @apiSuccess (info) {string} lastname  Lastname of the User.
 * @apiSuccess {boolean} active        Specify if the account is active.
 * @apiSuccess {object}  profile       返回对象
 * @apiSuccess {number}  profile.age   年龄
 * @apiSuccess {string}  profile.image 图片
 * @apiSuccess {object[]} profiles       返回数组
 * @apiSuccess {number}   profiles.age   年龄
 * @apiSuccess {String}   profiles.image 图片
 *
 * @apiSuccessExample 成功返回示例:
 *     HTTP/1.1 200 OK
 *     {
 *       "firstname": "John",
 *       "lastname": "Doe"
 *     }
 *
 * @apiError not_find 用户没有找到
 *
 * @apiErrorExample 错误返回示例:
 *     HTTP/1.1 200 Not Found
 *     {
 *       "error": "not_find"
 *     }
 */
func (i *Index) Info(c *gin.Context) {
	ip, _ := c.RemoteIP()
	variable.ZapLog.Info("客户机的ip地址:" + c.ClientIP() + "|代理ip是:" + ip.String())
	response.Success(c, "客户机的ip地址:"+c.ClientIP()+"|代理ip是:"+ip.String())
	return
}
